package com.ruoyi.system.mapper;

import java.util.List;
import com.ruoyi.system.domain.Product;
import com.ruoyi.system.domain.ProductType;
import com.ruoyi.system.domain.Unit;
import com.ruoyi.system.domain.Warehouse;
import com.ruoyi.system.domain.vo.ProductVo;
import org.apache.ibatis.annotations.Select;

/**
 * 产品信息Mapper接口
 * 
 * @author ruoyi
 * @date 2025-01-17
 */
public interface ProductMapper 
{
    /**
     * 查询产品信息
     * 
     * @param id 产品信息主键
     * @return 产品信息
     */
    public Product selectProductById(Long id);

    /**
     * 查询产品信息列表
     * 
     * @param product 产品信息
     * @return 产品信息集合
     */
    public List<ProductVo> selectProductList(Product product);

    /**
     * 新增产品信息
     * 
     * @param product 产品信息
     * @return 结果
     */
    public int insertProduct(Product product);

    /**
     * 修改产品信息
     * 
     * @param product 产品信息
     * @return 结果
     */
    public int updateProduct(Product product);

    /**
     * 删除产品信息
     * 
     * @param id 产品信息主键
     * @return 结果
     */
    public int deleteProductById(Long id);

    /**
     * 批量删除产品信息
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteProductByIds(Long[] ids);

    /**
     * 批量删除产品类型
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteProductTypeByIds(Long[] ids);
    
    /**
     * 批量新增产品类型
     * 
     * @param productTypeList 产品类型列表
     * @return 结果
     */
    public int batchProductType(List<ProductType> productTypeList);
    

    /**
     * 通过产品信息主键删除产品类型信息
     * 
     * @param id 产品信息ID
     * @return 结果
     */
    public int deleteProductTypeById(Long id);

    List<ProductVo> selectProductNumList(Product product);

    List<ProductVo> selectProductWarehousePositionList(Product product);

    @Select("SELECT pt.* FROM product p LEFT JOIN product_type pt ON p.product_type_id = pt.id WHERE p.name = #{productName}")
    ProductType selectProductTypeByName(String productName);

    @Select("SELECT u.* FROM product p LEFT JOIN unit u ON p.unid = u.id WHERE p.name = #{productName}")
    Unit selectUnitByProductName(String productName);

    @Select("SELECT w.* FROM product p LEFT JOIN warehouse w ON p.store_id = w.id WHERE p.name = #{productName}")
    Warehouse selectWarehouseByProductName(String productName);
}
